package com.hexinfo.dmpro.component.comparison.constants;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Package: com.hexinfo.dmpro.component.comparison.constants
 * @ClassName DataContrastConstants
 * @Description: 数据明细对比配置参数
 *  - enableDetailedContrast = false 表示不开启明细对比
 *  - smallAmountLimit = -1 表示不限制少量数据界限数量即不管表数据量多少都只做逐条数据比对
 *  - largeAmountLinit = -1 表示不限制大量数据界限即不管表数据量多少都不做定量数据比对
 *  - smallAmountLimit = -1 且 largeAmountLinit = -1 表示不管表数据量多少都只做抽样数据比对
 * @Author: wz.li
 * @Date 2023/9/27 14:43
 * @Version v2.0.2
 **/
@Data
@Component
@ConfigurationProperties(value = "data.contrast")
public class DataContrastConstants {

    // 是否开启明细对比
    private Boolean enableDetailedContrast = false;

    // 少量数据界限(-1表示不限制)
    private Integer smallAmountLimit = 0;

    // 大量数据界限(-1表示不限制)
    private Integer largeAmountLinit = -1;

    // 样本数量
    private Integer  sampleNumber = 10000;

    // 样本比例
    private Integer  sampleRatio = 10;

    // 大量数据比对次数
    private Integer  largeAmountContrastTimes = 10;

    /*
     * @Method: isItemizedDetailedDataConstart <br>
     * @Param: [tableDataTotal] <br>
     * @Return: boolean <br>
     * @Description：是否逐条比对（少量数据场景）<br>
     * @Author： wz.li<br>
     * @Date： 2023/9/27 14:34 <br>
     * @Version： V2.0.2<br>
     */
    public boolean isItemizedDetailedDataConstart(long  tableDataTotal){
        return enableDetailedContrast && (smallAmountLimit == -1 || tableDataTotal < smallAmountLimit);
    }

    /*
     * @Method: isRatioDetailedDataConstartDetailedDataConstart <br>
     * @Param: [] <br>
     * @Return: boolean <br>
     * @Description：是否按比例数据比对（中等数据场景）<br>
     * @Author： wz.li<br>
     * @Date： 2023/9/27 14:35 <br>
     * @Version： V2.0.2<br>
     */
    public boolean isRatioDetailedDataConstartDetailedDataConstart() {
        return enableDetailedContrast;
    }

    /*
     * @Method: isQuantifyDetailedDataConstart <br>
     * @Param: [tableDataTotal] <br>
     * @Return: boolean <br>
     * @Description：是否定量数据比对（大量数据场景）<br>
     * @Author： wz.li<br>
     * @Date： 2023/9/27 14:35 <br>
     * @Version： V2.0.2<br>
     */
    public boolean isQuantifyDetailedDataConstart(long tableDataTotal) {
        return enableDetailedContrast && largeAmountLinit != -1 && tableDataTotal > largeAmountLinit;
    }
}
